﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using haber.classes;
using haber.Yonetim;
using System.Data.Linq.SqlClient;
using Facebook;

namespace haber
{
    public partial class mainFuncs : System.Web.UI.Page
    {
        public class kategoriler{
            public int kategoriID { get; set; }
            public int ustKategoriID { get; set; }
            public string kategoriAdi { get; set; }
            public string facebookAdresi { get; set; }
            public string twitterAdresi { get; set; }
            public string facebookLink { get; set; }
            public string gpno { get; set; }
         
        }
        public class kategoriHaberler
        {
            public int haberID { get; set; }
            public int kategoriID { get; set; }
            public int ustKategoriID { get; set; }
            public string haberResmi { get; set; }
            public string ozet { get; set; }
            public string kategoriResim { get; set; }
            public string kategoriAdi { get; set; }
            public string haberBaslik { get; set; }
            public string haber { get; set; }
            public string logo { get; set; }
            public char? ozelSayfa { get; set; }
            public char ekTipi { get; set; }
            public Boolean sayfavar { get; set; }
        }
        public class haberEk{
                public char ektipi { get; set; }
                public string ek { get; set; }
        }
        public class haberClass
        {
            public kategoriHaberler haber { get; set; }
            public List<haberEk> ekler{ get; set; }
          

        }
        public class yazarlar
        {
            public string id { get; set; }
            public string username { get; set; }
            public string meslek { get; set; }
            public string resim { get; set; }
        }
        public class sayaclar
        {
            public string aktif { get; set; }
            public string toplam { get; set; }
            public string sosyal { get; set; }
        }

        public class ilanListesiMain
        {
            public int ilanID { get; set; }
            public string ilanMetni { get; set; }
        }
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        [WebMethod]
        public static int haberKategorisiGetir(int haberID)
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {

                var kat = from k in dc.HaberGonderims
                          where k.HaberID == haberID
                          select k.KategoriID;
                if (kat.Count() > 0)
                {
                    return kat.First();
                }
                else
                {
                    return -1;
                }
            }

        }
        [WebMethod]
        public static List<yazarlar> yazarGetir()
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {

                var calisan = from c in dc.aspnet_Users
                              join b in dc.YazarBilgis on c.UserId equals b.YazarID
                              where b.YazarYetkiAktif == 'T'
                              orderby c.UserName
                              select new yazarlar {username = c.UserName,resim = b.YazarResim,meslek=b.Meslek};
                if (calisan.Count() > 0)
                {
                    return calisan.ToList();
                }
                else
                {
                    return null;
                }
            }

        }

        [WebMethod]
        public static int reklamZamaniGetir()
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {

                return int.Parse(statics.tanimGetir("REKLAMDEGISIM", false));
                

            }

        }
        [WebMethod]
        public static List<ilanListesiMain> ilanListele()
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {

                var ilan = from i in dc.Ilanlars
                           select new ilanListesiMain { ilanID = i.ID, ilanMetni = i.Ilan };

                if (ilan.Count() > 0)
                {
                    return ilan.ToList();
                }
                else
                {
                    return null;
                }


            }

        }
        [WebMethod]
        public static string ilanMetniGetir()
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {

                var ilan = from i in dc.ILANMETNIs
                           where i.ID == 1
                           select i;
                return ilan.First().ILANMETNI1;


            }
        }
        [WebMethod]
        public static void SessionYaz(string sparam, string s)
        {
            HttpContext.Current.Session[sparam] = s;
        }
        [WebMethod]
        public static void reklamSayacArttir(string alanAdi)
        {
            try
            {
             
                using (dcHaberDataContext dc = new dcHaberDataContext())
                {
                    var r = from reklam in dc.Reklams
                            select reklam;
                    Reklam rek = r.First();
             
                    if (alanAdi == "y1")
                    {
                        rek.Alan1Toplam = rek.Alan1Toplam.Value + 1;
                     
                    }
                    if (alanAdi == "y2")
                    {
                        rek.Alan2Toplam = rek.Alan2Toplam.Value + 1;
                    }
                    
                    if (alanAdi == "t")
                    {
                        rek.TamBoyToplam = rek.TamBoyToplam.Value + 1;
                    }
                    dc.SubmitChanges();
                }
            }
            catch (Exception)
            {
                //  throw new Exception("Program Eklenirken Hata : " + ex.Message);
            }
        }

        [WebMethod]
        public static sayaclar onlineKullaniciSayisi()
        {
            try
            {
                long l = 0;
                sayaclar s = new sayaclar();
                using(dcHaberDataContext dc = new dcHaberDataContext()){
                      var top = from t in dc.Sayacs
                                select t;
                    s.toplam = top.Count().ToString();
                   
                    var face = from ta in dc.Tanimlars
                               where ta.Tanım == "FACEBOOKTOPLAM"
                               select ta;
                    var twit = from tw in dc.Tanimlars
                               where tw.Tanım == "TWITTOPLAM"
                               select tw;

                    l = long.Parse(face.First().Parametre) + long.Parse(twit.First().Parametre);
                }
                s.sosyal = l.ToString();
                s.aktif = HttpContext.Current.Application["OnlineUsers"].ToString();
                
                return s;
            }
            catch (Exception ex)
            {
                throw new Exception("Program Eklenirken Hata : " + ex.Message);
            }
        }

        [WebMethod]
        public static reklamYayinlari reklamTanimlariGetir()
        {
            try
            {

                using (dcHaberDataContext dc = new dcHaberDataContext())
                {
                    var rek = from r in dc.Reklams
                              select new reklamYayinlari {  yayin1 = r.ReklamAlani1, yayin2 = r.ReklamAlani2, tamboyAcik = r.TamBoy.Value,tamboyresim = r.TamBoyResim,y1Acik =r.Alan1.Value,y2Acik = r.Alan2.Value,tamboytoplam = r.TamBoyToplam.Value,yarimboy1Toplam = r.Alan1Toplam.Value,yarimboy2Toplam=r.Alan2Toplam.Value,reklamlink1 = r.alan1link,reklamlink2 = r.alan2link,tamboylink=r.tamboylink };

                    return rek.Single();
                }

            }
            catch (Exception ex)
            {
                throw new Exception("Program Eklenirken Hata : " + ex.Message);
            }
        }


        [WebMethod]
        public static string tvVideoGetir()
        {

            try
            {
                using (dcHaberDataContext dc = new dcHaberDataContext())
                {
                    var tme = DateTime.Now;
                    var zamanVideo = from d in dc.VideoYayinis
                                     join v in dc.TvPrograms on d.VideoID equals v.ProgramID
                                     where new DateTime(tme.Year, tme.Month, tme.Day, d.BaslangicSaati.Value.Hour ,d.BaslangicSaati.Value.Minute,00) < tme
                                     orderby d.BaslangicSaati descending
                                     select v.VideoAdi;
                    if (zamanVideo.Count() > 0)
                    {
                        return zamanVideo.First();
                    }
                    else
                    {
                         zamanVideo = from d in dc.VideoYayinis
                                         join v in dc.TvPrograms on d.VideoID equals v.ProgramID                                         
                                         orderby d.BaslangicSaati descending
                                         select v.VideoAdi;
                         if (zamanVideo.Count() > 0)
                         {
                             return zamanVideo.First();
                         }
                    }


                    var video = from d in dc.TvPrograms
                                where d.Varsayilan == 'T'
                                select d;
                    if (video.Count() > 0)
                    {
                        return video.First().VideoAdi;
                    }
                    else
                    {
                        return null;
                    }

                }
            }
            catch (Exception ex)
            {
                throw new Exception("Açılış Kategorisi Getirilirken Hata  : " + ex.Message);
            }
        }

        [WebMethod]
        public static List<tvYayinListesi> tvYayinListesiGetir()
        {
            try
            {
                using (dcHaberDataContext dc = new dcHaberDataContext())
                {
                    var yayinlar = from p in dc.VideoYayinis
                                   orderby p.BaslangicSaati
                                   select new tvYayinListesi { programAdi = p.TvProgram.ProgramAdi, videoDosyasi = p.TvProgram.VideoAdi, yayinID = p.VideoYayinID, baslangicSaati = p.BaslangicSaati.Value.ToShortTimeString()};
                    if (yayinlar.Count() > 0)
                    {
                        return yayinlar.ToList();
                       
                    }
                    else
                    {
                        return null;
                    }


                }

            }
            catch (Exception ex)
            {
                throw new Exception("Program Eklenirken Hata : " + ex.Message);
            }
        }

        [WebMethod]
        public static string acilisKategorisiGetir()
        {
           
            
            try
            {
                using (dcHaberDataContext dc = new dcHaberDataContext())
                {
                  
                    return statics.tanimGetir("ACILISKATEGORI", false);

                }
            }
            catch (Exception ex)
            {
                throw new Exception("Açılış Kategorisi Getirilirken Hata  : " + ex.Message);
            }
        }
        [WebMethod]
        public static haberClass haberGetir(int haberID)
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {

                var haber = from h in dc.Habers
                            where h.HaberID == haberID
                            select new kategoriHaberler { haberBaslik = h.Baslik, haberID = h.HaberID, haberResmi = h.HaberResim, ozet = h.Ozet, haber = h.Detay };
                if (haber.Count() > 0)
                {
                    haberClass hbr  = new haberClass();
                    var haberEkleri = from he in dc.HaberEklers
                                      where he.HaberID == haberID
                                      select new haberEk { ek = he.Ek, ektipi = he.Tip };
                    hbr.haber = haber.First();
                    if (haberEkleri.Count() > 0)
                    {
                        hbr.ekler = haberEkleri.ToList();
                    }
                    else
                    {
                        hbr.ekler = null;
                    }
                    return hbr;
                }
                else
                {
                    return null;
                }

            }
        }

        [WebMethod]
        public static List<kategoriler> kategorileriGetir()
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {
                List<kategoriler> kats = new List<kategoriler>();
                var ust  = from k in dc.HaberKategorileris
                           where k.UstKategoriID == -1 && k.OzelSayfa == 'F'
                           orderby k.Sira
                           select new kategoriler { kategoriID = k.KategoriID, ustKategoriID = k.UstKategoriID.HasValue ? k.UstKategoriID.Value : -1, facebookAdresi = k.FBAdresi, twitterAdresi = k.TwitterScreenName, kategoriAdi = k.KategoriAdi, facebookLink = k.FBPageName == null ? null : "http://www.facebook.com/pages/" + k.FBPageName + "/" + k.FBPageID, gpno = k.GplusNo == null ? "" : k.GplusNo };
                var ozelSayfalar = from os in dc.HaberKategorileris                                   
                                   where os.OzelSayfa == 'T' && os.UstKategoriID == -1                                   
                                   select os.KategoriID;

                var alt = from k in dc.HaberKategorileris
                          where k.UstKategoriID != -1 && !ozelSayfalar.Contains(k.UstKategoriID.Value)
                          orderby k.Sira ascending, k.KategoriAdi ascending
                          select new kategoriler { kategoriID = k.KategoriID, ustKategoriID = k.UstKategoriID.HasValue ? k.UstKategoriID.Value : -1, facebookAdresi = k.FBAdresi, twitterAdresi = k.TwitterScreenName, kategoriAdi = k.KategoriAdi, facebookLink = k.FBPageName == null ? null : "http://www.facebook.com/pages/" + k.FBPageName + "/" + k.FBPageID, gpno = k.GplusNo == null ?"":k.GplusNo };

                kats.AddRange(ust);
                kats.AddRange(alt);
                if (kats.Count() > 0)
                {
                    return kats;
                }
                else
                {
                    return null;
                }
            }
        }

        [WebMethod]
        public static List<kategoriHaberler> kategoriHaberleriniGetir(int kategoriID,int sayfa)
        {
            using (dcHaberDataContext dc = new dcHaberDataContext())
            {

                char? os  ='F';
                var ustKategori = from o in dc.HaberKategorileris
                                where o.KategoriID == kategoriID
                                select o.UstKategoriID;
                if (ustKategori.Count() > 0){

                    var ozelKategori = from o in dc.HaberKategorileris
                                       where o.KategoriID == ustKategori.First()
                                       select o.OzelSayfa;
                    os = ozelKategori.First();
                }
                
                

                var kategoriler = from k in dc.HaberGonderims join h in dc.Habers on k.HaberID equals h.HaberID
                                  where k.KategoriID == kategoriID
                                  orderby k.OlusturmaTarihi descending
                                  select new kategoriHaberler { haberID = k.HaberID,  kategoriAdi = k.HaberKategorileri.KategoriAdi, kategoriID = k.KategoriID, kategoriResim = k.HaberKategorileri.Logo, ozet = h.Ozet,haberBaslik = h.Baslik, ustKategoriID = k.HaberKategorileri.UstKategoriID.Value,logo=k.HaberKategorileri.Logo,ozelSayfa = os};
                if (kategoriler.Count() > 0)
                {
                    List<kategoriHaberler> kh = kategoriler.Skip(sayfa * 50).Take(50).ToList();
                    foreach (var k in kh)
                    {
                        var ek = from e in dc.HaberEklers
                                 where e.HaberID == k.haberID
                                 select e;
                        if (ek.Count() > 0)
                        {
                            k.ekTipi = ek.First().Tip;
                            k.haberResmi = ek.First().Ek;
                        }

                    }

                    return kh;
                }
                else
                {
                    return null;
                }

            }
        }

        [WebMethod]
        public static List<kategoriHaberler> haberAra(string metin)
        {
            if (metin.Length < 3)
            {
                return null;
            }

            using (dcHaberDataContext dc = new dcHaberDataContext())
            {

                var kategoriler = from h in dc.Habers 
                                  where SqlMethods.Like(h.Baslik.ToLower(), "%" + metin.ToLower() + "%") 
                                  select new kategoriHaberler { haberID = h.HaberID, haberResmi = h.HaberResim,ozet = h.Ozet, haberBaslik = h.Baslik };
                if (kategoriler.Count() > 0)
                {
                    return kategoriler.ToList();
                }
                else
                {
                    return null;
                }

            }
        }

    }
}